// 修改webPack的配置

// 判断是否为生成模式的环境
let isProduction = process.env.NODE_ENV === "production";
//声明 排除不打包的变量
let externals = {};
let cdn = { css: [], js: [], preload: { js: [] } };

if (isProduction) {
  // 如果是 生产模式  就使用以下配置
  externals = {
    "element-ui": "ELEMENT",
    vue: "Vue",
    echarts: "echarts",
    quill: "Quill",
  };
  cdn = {
    css: [
      "https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.7/theme-chalk/index.min.css",
      "https://cdn.bootcdn.net/ajax/libs/quill/1.3.7/quill.core.min.css",
      "https://cdn.bootcdn.net/ajax/libs/quill/1.3.7/quill.snow.min.css",
      "https://cdn.bootcdn.net/ajax/libs/normalize/8.0.1/normalize.min.css",
    ],
    js: [
      //   js引入  vue一定要在最上面  因为elementUI依赖vue这个包，所以elementUI的js包一定要在vue的下面
      "https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js",
      "https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.7/index.min.js",
      "https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.min.js",
      "https://cdn.bootcdn.net/ajax/libs/quill/1.3.4/quill.min.js",
    ],
    // 预加载
    preload: {
      // 对数组js 中的文件进行预加载
      js: [
        "https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js",
        "https://cdn.bootcdn.net/ajax/libs/element-ui/2.15.7/index.min.js",
      ],
    },
  };
}

module.exports = {
  lintOnSave: false,
  publicPath: "./", // 为了双击打包后的html文件依然可以加载相应的js代码
  configureWebpack: {
    externals,
  },
  // vue-cli3/4 提供的修改Webpack配置的方法，参数config就可以看成webpack里面的配置
  chainWebpack(config) {
    // 如果是生产环境下 就使用main.prod.js 入口文件
    // isProduction：为true 就执行下面的代码
    config.when(isProduction, (config) => {
      config.entry("app").clear().add("./src/main.prod.js");
    });
    // 如果不是生产环境下 就使用main.dev.js 入口文件
    config.when(!isProduction, (config) => {
      //entry找到默认的打包入口，调用clear则是删除默认的打包入口
      //add添加新的打包入口
      config.entry("app").clear().add("./src/main.dev.js");
    });

    // 注入cdn变量 (打包时会执行)
    config.plugin("html").tap((args) => {
      args[0].title = "Z-admin前端后台控制系统";
      args[0].cdn = cdn; // 配置cdn给插件
      return args;
    });
  },
};
